package routers

// 6. 注解路由

// @APIVersion 1.0.0
// @Title beego Test API
// @Description beego has a very cool tools to autogenerate documents for your API
// @Contact astaxie@gmail.com
// @TermsOfServiceUrl http://beego.me/
// @License Apache 2.0
// @LicenseUrl http://www.apache.org/licenses/LICENSE-2.0.html

import (
	"github.com/topaz-h/beego-api/controllers"
	"github.com/topaz-h/beego-api/tools"

	"github.com/astaxie/beego"
	"github.com/astaxie/beego/context"
)

//CRUD Create(创建)、Read(读取)、Update(更新)和Delete(删除)
func init() {

	// 1.初始化 namespace 对象,下面这些函数都是 namespace 对象的方法,但是强烈推荐使用 NS 开头的相应函数注册，因为这样更容易通过 gofmt 工具看的更清楚路由的级别关系
	ns := beego.NewNamespace("/v1",
		// 1.1NSCond: 支持满足条件的就执行该 namespace, 不满足就不执行
		beego.NSCond(func(ctx *context.Context) bool {
			tools.LogInfo(ctx.Input.UserAgent())// 请求客户端
			//[127.0.0.1 http://127.0.0.1 /v1 /v1 127.0.0.1 127.0.0.1]
			//tools.LogInfo(ctx.Input.Domain(),  ctx.Input.Site(), ctx.Input.URI(),ctx.Input.URL(),ctx.Input.Host(),ctx.Input.IP())// 请求主机
			return true
		}),
		// 1.2NSAfter和NSBefore: 上面分别对应 beforeRouter 和 FinishRouter 两个过滤器，可以同时注册多个过滤器
		//beego.NSBefore(auth),

		// 1.3设置路由
		//beego.NSGet("/", &controllers.MainController{}),// 仅支持匿名函数形式
		beego.NSRouter("/", &controllers.MainController{}),

		beego.NSGet("/:id", func(ctx *context.Context) {
			id := ctx.Input.Param(":id")
			//ctx.Output.Body([]byte("notAllowed"))
			ctx.WriteString(" 变量匹配 Id:" + id)
		}),

		beego.NSRouter("/register", &controllers.RegisterController{}),

		//beego.NSRouter("/version", &AdminController{}, "get:ShowAPIVersion"),c
		//beego.NSRouter("/changepassword", &UserController{}),
		beego.NSNamespace("/shop",
			//beego.NSBefore(sentry),
			beego.NSGet("/:id", func(ctx *context.Context) {
				//ctx.Output.Body([]byte("notAllowed"))
				ctx.WriteString("shop/:id")
			}),
		),
		// 1.3.4NSInclude 注解路由
		//beego.NSNamespace("/object",
		//	beego.NSInclude(
		//		&controllers.ObjectController{},
		//	),
		//),
		//beego.NSNamespace("/user",
		//	beego.NSInclude(
		//		&controllers.UserController{},
		//	),
		//),
	)

	// 2.注册 namespace
	beego.AddNamespace(ns)
}
